package MyRedis

import (
	"github.com/go-redis/redis/v8"
	"sync"
	"time"
)

var Mredis *redis.Client
var Sync_once sync.Once //单例

func MRedis() *redis.Client {
	//redis
	Sync_once.Do(func() {
		Mredis = redis.NewClient(&redis.Options{
			Network:            "tcp",
			Addr:               "127.0.0.1:6379",
			Password:           "123456", // no password set
			DB:                 0,        // use default DB
			PoolSize:           15,
			MinIdleConns:       5,
			DialTimeout:        time.Second * 5,
			ReadTimeout:        time.Second * 3,
			WriteTimeout:       time.Second * 3,
			PoolTimeout:        time.Second * 5,  //当所有连接都处在繁忙状态时，客户端等待可用连接的最大等待时长，默认为读超时+1秒。
			IdleCheckFrequency: time.Second * 60, //闲置连接检查的周期，默认为1分钟，-1表示不做周期性检查，只在客户端获取连接时对闲置连接进行处理。
			IdleTimeout:        5 * time.Minute,  //闲置超时
			MaxConnAge:         0 * time.Second,  //连接存活时长，从创建开始计时，超过指定时长则关闭连接，默认为0，即不关闭存活时长较长的连接
			//命令执行失败时的重试策略
			MaxRetries:      0,                      // 命令执行失败时，最多重试多少次，默认为0即不重试
			MinRetryBackoff: 8 * time.Millisecond,   //每次计算重试间隔时间的下限，默认8毫秒，-1表示取消间隔
			MaxRetryBackoff: 512 * time.Millisecond, //每次计算重试间隔时间的上限，默认512毫秒，-1表示取消间隔
		},
		)
	})
	return Mredis
}
